以下是前20個SwiftUI中的屬性包裝器 使用場合及範例程式碼:
| 屬性包裝器 | 描述 | 使用場合 | 程式範例 | 
|---|---|---|---|
| @State | 管理視圖內部的局部狀態,當狀態變更時,視圖會自動重新渲染。 | 單一視圖內部的狀態管理,如按鈕狀態、表單輸入。 | @State private var isOn: Bool = false var body: some View { Toggle("Switch", isOn: $isOn) } | 
| @Binding | 允許子視圖修改父視圖的狀態,透過雙向綁定狀態。 | 當子視圖需要修改父視圖的狀態時使用。 | struct ChildView: View { @Binding var isOn: Bool var body: some View { Toggle("Switch", isOn: $isOn) } } | 
| @StateObject | 初始化並管理 ObservableObject,視圖負責管理物件的生命週期。 | 在視圖內建立並持有ViewModel等狀態物件。 | class ViewModel: ObservableObject { @Published var count = 0 } struct ContentView: View { @StateObject var viewModel = ViewModel() var body: some View { Text("\(viewModel.count)") } } | 
| @ObservedObject | 監控外部的 ObservableObject,當物件的狀態變更時通知視圖更新。 | 當父視圖需要傳遞物件給子視圖進行觀察時。 | class ViewModel: ObservableObject { @Published var count = 0 } struct ParentView: View { @ObservedObject var viewModel = ViewModel() var body: some View { ChildView(viewModel: viewModel) } } | 
| @EnvironmentObject | 將物件放置在環境中,使子視圖可以訪問並共享該物件。 | 當多個視圖需要共享相同資料,但不希望手動傳遞時。 | class UserSettings: ObservableObject { @Published var username: String = "User" } struct ContentView: View { @EnvironmentObject var settings: UserSettings var body: some View { Text(settings.username) } } | 
| @Published | 用於自訂的 ObservableObject類型內,當屬性變更時通知觀察者。 | 定義在 ObservableObject內,標記會影響視圖的狀態屬性。 | class ViewModel: ObservableObject { @Published var count = 0 } | 
| @Environment | 提供從環境中提取系統相關的值,如配色方案、顯示比例等。 | 需要訪問系統環境資料,如裝置的設定或環境狀態時。 | @Environment(\.colorScheme) var colorScheme | 
| @AppStorage | 用戶預設存儲的包裝器,讓SwiftUI視圖自動綁定到 UserDefaults。 | 當需要將簡單數據持久化並在App中保持共享狀態時使用。 | @AppStorage("username") var username: String = "" | 
| @SceneStorage | 與 @AppStorage類似,但專門用於儲存場景(scene)特定的狀態。 | 儲存應用程序在多個場景中各自的狀態,如在iPad上多個場景。 | @SceneStorage("textFieldContent") var text: String = "" | 
| @FetchRequest | 與Core Data整合,透過此包裝器進行資料的查詢操作。 | 在SwiftUI中直接綁定Core Data資料查詢結果到視圖。 | @FetchRequest(entity: User.entity(), sortDescriptors: []) var users: FetchedResults<User> | 
| @FocusState | 控制視圖的焦點狀態,特別是用於表單輸入中的焦點管理。 | 需要動態控制表單輸入欄位的焦點時。 | @FocusState private var isFocused: Bool | 
| @GestureState | 管理手勢的中間狀態,當手勢改變時更新其值。 | 當需要管理長按、拖動等手勢的狀態時。 | @GestureState private var dragOffset: CGSize = .zero | 
| @MainActor | 確保程式碼在主執行緒上執行,特別是需要更新UI的程式碼。 | 當進行需要更新UI的非同步操作時。 | @MainActor func updateUI() { } | 
| @NSManaged | 用於Core Data的屬性,標記需要由Core Data管理的屬性。 | 在Core Data中使用,用來聲明由Core Data處理的屬性。 | @NSManaged var name: String | 
| @UIApplicationDelegateAdaptor | 允許將 UIApplicationDelegate適配到SwiftUI中。 | 需要將應用程式委派的生命週期事件整合到SwiftUI時。 | @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate | 
| @ViewBuilder | 用來構建複雜的視圖層次結構,允許返回多個視圖。 | 當視圖需要動態構建且包含多個子視圖時使用。 | @ViewBuilder var body: some View { Text("Hello") Text("World") } | 
| @ScaledMetric | 允許開發者依據用戶設置的動態字體大小來縮放視圖中的數字。 | 需要根據用戶字體設置動態調整數值大小時。 | @ScaledMetric var scale: CGFloat = 1.0 | 
| @Namespace | 用來建立動畫的命名空間,特別是 matchedGeometryEffect動畫。 | 用於在兩個視圖間進行動畫過渡。 | @Namespace var animationNamespace | 
| @AttributedStringBuilder | 允許構建富文本內容。 | 當需要在SwiftUI中使用富文本(多樣式文本)時使用。 | @AttributedStringBuilder var attributedText: AttributedString { ... } | 
這些屬性包裝器從管理局部狀態(@State、@Binding),到處理複雜資料模型(@StateObject、@ObservedObject、@EnvironmentObject),再到處理系統環境和持久化數據(如@AppStorage、@SceneStorage、@Environment),幫助SwiftUI開發者更輕鬆地管理狀態、資料流和環境設置。
多的不只這些常用的列進去
!!!這包裝屬性是SwiftUI精神靈魂!!!做此表謹記備查